package 集合.泛型;

import java.util.ArrayList;
import java.util.List;

public class demo02 {
    public static void main(String[] args) {
        /*
            1.泛型么有继承性
            2.<?>:支持任意泛型类型
            3.<? extends A> 支持A类以及A类的子类，规定了泛型的上限
            4.<? super A>   支持A类以及A类的父类，不限于直接父类，规定了泛型的下限
         */
        List<Object > list1 = new ArrayList<>();
        List<Integer > list2 = new ArrayList<>();
        List<A> list3 = new ArrayList<>();
        List<B> list4 = new ArrayList<>();
        List<C> list5 = new ArrayList<>();
        printCollection01(list1);
        printCollection01(list2);
        printCollection01(list3);
        printCollection01(list4);
        printCollection01(list5);

//        printCollection02(list1);
//        printCollection02(list2);
//        printCollection02(list3);
//        printCollection02(list4);
//        printCollection02(list5);
//        printCollection03(list1);
//        printCollection03(list2);
//        printCollection03(list3);
//        printCollection03(list4);
//        printCollection03(list5);

    }
    //接受任意的泛型类型
    public static void printCollection01(List<?> l){
        for (Object o : l) {
            System.out.println(o);
        }
    }
    //<? extends A> 支持A类以及A类的子类
    public static void printCollection02(List<? extends A> l){
        for (Object o : l) {
            System.out.println(o);
        }
    }
    //<? super A>   支持A类以及A类的父类，不限于直接父类
    public static void printCollection03(List<? super A> l){
        for (Object o : l) {
            System.out.println(o);
        }
    }
}

class A{}
class B extends A{}
class C extends B{}